/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package networkrespnse;

import core.BuildInfo;
import core.Order2;
import core.ParameterDecoder;
import java.util.Vector;
import utils.Utils;

/**
 *
 * @author Kvest
 */
public class GetOrdersResponse extends Response
{
    private Vector orders;

    public GetOrdersResponse(byte[] data)
    {
        super(GET_ORDERS_RESPONSE);
        orders = new Vector();
        
        parse(data);
    }

    protected void parse(byte[] data)
    {
        byte[] body,temp;
        int index;
        index = 0;
        //��������  body
        body = ParameterDecoder.getTransferBody(data);

        temp = new byte[4];
        for (int i=0;i<4;i++)
        {
            temp[i] = body[index++];
        }
        int offset = Utils.byteToInt(temp);
        index += offset;

        //Если произошла ошибка - ничего не делаем
        if (body[index++] == 1)
        {
            return;
        }
        
        //Находим количество заказов
        for (int i=0;i<4;i++)
        {
            temp[i] = body[index++];
        }
        int ordersCount = Utils.byteToInt(temp);
        
        //Перебераем все заказы  
        for (int i=0; i < ordersCount; ++i)
        {
            temp = new byte[4];
            for (int j=0;j<4;j++)
            {
                temp[j] = body[index++];
            }
            
            //Парсим вложенный заказ
            OrderResponse orderResp = createOrderResponse(); 
            orderResp.createOrder();
            orderResp.parse(body, index);
            orders.addElement(orderResp);
            
            //Вычисляем новую позицию курсора
            index += Utils.byteToInt(temp);//orderResp.parse(body, index);
        }
    }

    private OrderResponse createOrderResponse() {
        if (BuildInfo.DISP_ORDER_NUMBER == 4) {
            return new OrderResponse4(Response.ORDER_RESPONSE4);
        } else if (BuildInfo.DISP_ORDER_NUMBER == 3) {
            return new OrderResponse3(Response.ORDER_RESPONSE3);
        } else if (BuildInfo.DISP_ORDER_NUMBER == 2) {
            return new OrderResponse2(Response.ORDER_RESPONSE2);
        } else {
            return new OrderResponse(Response.ORDER_RESPONSE);
        }
    }
    
    public int count()
    {
        return orders.size();
    }

    public OrderResponse getOrder(int index)
    {
        return (OrderResponse)orders.elementAt(index);
    }
}
